package homework.day06;

import java.io.File;
import java.io.FileInputStream;
import java.io.ObjectInputStream;

/**
 * 将当前目录下的所有obj文件获取到，并进行
 * 反序列化后输出每个用户的信息(直接输出反序
 * 列化后的User对象即可)
 * @author Jobs
 *
 */
public class Test02 {
    public static void main(String[] args) {
        String path = "./src/main/java/homework/day06/";
        File dir = new File(path);

        // 创建字节输入流
        FileInputStream fis = null;
        // 获取当前目录下的所有文件
        File[] subs = dir.listFiles();
        for(int i=0;i<subs.length;i++){
            System.out.println(subs[i].getName());
            if(subs[i].getName().endsWith(".obj")){
                try{
                    fis = new FileInputStream(subs[i]);
                    // 创建对象流
                    ObjectInputStream ois = new ObjectInputStream(fis);

                    // 使用超类对象去存储反序列化的对象
                    Object obj = ois.readObject();
                    // 判断是否是User类，是就输出
                    if(obj instanceof User){
                        User user = (User)obj;
                        System.out.println(user);
                    }
                    // 创建实例去存储反序列化的对象
                    // 先判断反序列化的对象是否是User对象
//                    if(ois.readObject() instanceof User){
//                        User user1 = (User)ois.readObject();
//                        System.out.println(user1);
//                    }

                }catch (Exception e){
                    System.out.println("遇到异常1：" + e);
                }finally {
                    try{
                        // 关闭流
                        fis.close();
                    }catch (Exception e){
                        System.out.println("遇到异常：" + e);
                    }
                }

            }
        }

        // 关闭流

    }
}

/*
    提示代码:
	需要用到的语句，尝试按照正确顺序将下列代码并放在main方法中完成需求，
	并在注释中标注每句话的作用，
	//【在这里标注该句代码意义】 创建一个文件对象
    File dir = new File(".");

    //【在这里标注该句代码意义】 遍历数组
    for(int i=0;i<subs.length;i++){

    }

    //【在这里标注该句代码意义】 使用lambda表达式获取当前目录下的所有obj文件
    File[] subs = dir.listFiles((f)->f.getName().endsWith(".obj"));

    //【在这里标注该句代码意义】依次读取文件
    FileInputStream fis = new FileInputStream(sub);

    //【在这里标注该句代码意义】
    File sub = subs[i];//从数组中获取每一个obj文件

    //【在这里标注该句代码意义】 输出反序列化的对象
    System.out.println(user);

    //【在这里标注该句代码意义】创建对象输入流
    ObjectInputStream ois = new ObjectInputStream(fis);

    //【在这里标注该句代码意义】创建实例对象去强转反序列化的对象
    User user = (User)obj;

    //【在这里标注该句代码意义】反序列化
    Object obj = ois.readObject();

    //【在这里标注该句代码意义】判断对象是否是User类
    if(obj instanceof User){

    }

 */